package io.filestream.filter;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
//필터 계열의 스트림을 쓰고 배우는 것이 이번 수업의 목적이다.
public class FileCopy2 {
	//FileInput/outputStream - BufferedInputStream/BufferedOutputStream 필터를 추가해서 입출력 효율을 높이기
	
	public void copy(String sourceFile, String tagetFile) throws IOException {//무슨 의미지? 
		//호출하는 쪽에서는 위에 구문만 보고 사용하는데, 어 얘네들이 쓰로우즈 아이오 익셉션을 던지네? 이건 이 메소드가 아이오예외를 발생시킬 수 있다는걸 알려주는거고
		//이걸 사용하는 쪽에서 이 문제에 대한 리포트를 하기 위한 목적이다.
		BufferedInputStream bis = null;
		BufferedOutputStream bos = null;
		
		try {
			bis = new BufferedInputStream(new FileInputStream(sourceFile));
			bos = new BufferedOutputStream(new FileOutputStream(tagetFile));
			int data = bis.read();//1바이트 인풋
			int cnt = 0;
			while(data != -1){
				cnt++;
				bos.write(data);//1바이트 아웃풋(읽은 1바이트를 출력)
				data = bis.read();
			}
			System.out.println(cnt);
		} finally {
			//필터 스트림을 닫으면 노드도 같이 닫힌다.
			if(bis != null) bis.close();//IF문 안에서 실행할 코드가 한줄뿐이면 중괄호를 생략해도 된다.
			if(bos != null) bos.close();
			
		}
		//위 트라이 파이널리 구문은 익셉션이 발생했을때 캐취를 하지 않고 던져 버리고 대신 던지기 전에 꼭 해야할 일을 파이널리에 써준다.
		
		
	}
	public static void main(String[] args) throws IOException{
		FileCopy2 fc = new FileCopy2();
		fc.copy("c:\\day\\Penguins.jpg", "c:\\day\\Penguins3.jpg");
	}
}
